A redundant array of independent disks (e.g., RAID) system may be a data storage scheme that utilizes multiple physical disks (e.g., hard disk drives) to share and/or to replicate data among the physical drives. A RAID system may increase data integrity, fault-tolerance, throughput, and/or capacity compared to a single physical drive. The RAID system may combine multiple physical disks into a single logical unit and may be seen by an operating system (e.g., Windows, UNIX, and/or Mac OSX, etc.) to be implemented on a server computer, and/or personal computers.
A RAID controller may communicate with the physical disks through a bus (e.g., IDE, SCSI, SATA, SAS, and/or fiber channel, etc.) to manage physical storage units in the RAID system and to present the physical storage units to the operating system (e.g., Windows, UNIX, and/or Mac OSX, etc.) as logical units. To configure the RAID controller, a RAID management application may be utilized to program an underlying RAID system to a desired RAID configuration (e.g., RAID level, number of physical disks, combination of physical disks, etc.). However, the RAID management application may be specific to a particular RAID implementation logic and/or firmware details of the RAID controller. As a result, base programming for the RAID management application may become non-extensible and/or non-reusable due to re-programming requirements in the RAID management application for a different RAID implementation (e.g., a different RAID implementation logic, level, and/or different firmware details of the RAID controller, etc.).
The RAID management application may need to possess the ability to acquire system information (e.g., available physical drives, valid RAID levels, and/or available virtual disk size, etc.) posing an additional constraint on coding of the RAID management application while bounding utilization of the RAID management application to a particular RAID implementation (e.g., the particular RAID implementation logic, level, and/or particular firmware details of the RAID controller, etc.). Further, inefficiencies due to code duplication is exacerbated between different RAID management applications due to minor differences in the different RAID implementations (e.g., the different RAID implementation logic, level, and/or different firmware details of the RAID controller, etc.) that require minor code modification of the RAID management applications to ensure usability (e.g., compatibility, programmability, etc.) with each different RAID implementation.